Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

save xls to csv/dbf without Excel/win32com.client

41 views
Skip to first unread message

noydb

unread,
Jun 5, 2010, 7:47:11 PM6/5/10
to
Is there a way to save a .xls file (the first worksheet) as a .dbf
or .csv without opening an instance of Excel with win32com.client
(been awhile, is this the best module these days for v2.5)? In case a
computer does not have Excel (2007) installed.

Tim Chase

unread,
Jun 5, 2010, 9:31:23 PM6/5/10
to noydb, pytho...@python.org

Use the "xlrd" module[1]

############################
import csv
import xlrd

FILE_NAME = 'example.xls'
wb = xlrd.open_workbook(FILE_NAME)

for name in wb.sheet_names():
out = file('%s.csv' % name, 'wb')
writer = csv.writer(out)
sheet = wb.sheet_by_name(name)
for row in xrange(sheet.nrows):
writer.writerow([
sheet.cell_value(row, col)
for col in xrange(sheet.ncols)
])
out.close()
#############################

You say you only want the first sheet, so adjust accordingly.

-tkc

[1]
http://pypi.python.org/pypi/xlrd/


noydb

unread,
Jun 6, 2010, 7:59:17 PM6/6/10
to

Many thanks Tim, this worked well!

In the interest of learning, anyone have a XLS to DBF solution?

Tim Chase

unread,
Jun 6, 2010, 9:47:27 PM6/6/10
to noydb, pytho...@python.org

This becomes considerably trickier unless you're willing to have
all your DBF fields be CHAR-format rather than their actual
data-type. In an Excel file, one column can hold multiple
data-types (text, numbers, formulas, dates, currency, etc)
whereas (from my humble understanding) a single column in a DBF
must be of the same data-type.

That said, if you want to attempt it, I'd suggest using

http://dbfpy.sourceforge.net/

to create the DBF files using code similar to my CSV version
(which mostly iterates over the Excel workbook and dumps the
contents to CSV files -- just change it to dump the contents to
your DBF).

-tkc

0 new messages